home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / dev_libs / feelin040718 / sources / dataspace / iff.c < prev    next >
C/C++ Source or Header  |  2004-08-03  |  2KB  |  68 lines

  1. #include "Private.h"
  2.  
  3. //#define DB_WRITEIFF
  4.  
  5. ///DS_WriteIFF
  6. F_METHODM(LONG,DS_WriteIFF,FS_Dataspace_WriteIFF)
  7. {
  8.    struct LocalObjectData *LOD   = F_LOD(Class,Obj);
  9.  
  10.    APTR                    next;
  11.    struct FeelinChunkData *chunk;
  12.  
  13.    PushChunk(Msg -> IFF,Msg -> Type,Msg -> ID,IFFSIZE_UNKNOWN);
  14.  
  15.    next = LOD -> Chunks.Head;
  16.  
  17. ///DB_WRITEIFF
  18. #ifdef DB_WRITEIFF
  19.    if (!next)
  20.    {
  21.       F_DebugOut("DS.WriteIFF() - Dataspace Empty\n");
  22.    }
  23. #endif
  24. //+
  25.  
  26.    while (chunk = F_NextNode(&next))
  27.    {
  28. ///DB_WRITEIFF
  29. #ifdef DB_WRITEIFF
  30.       ULONG *array = (ULONG *)((ULONG)(chunk) + sizeof (struct FeelinChunkData));
  31.       F_DebugOut("Dataspace.WriteIFF - Chunk 0x%lx - ID %08.lx (%4.4s) - Data: %08.lx%08.lx%08.lx%08.lx\n",chunk,chunk -> ID,&chunk -> ID,array[0],array[1],array[2],array[3]);
  32. #endif
  33. //+
  34.       WriteChunkBytes(Msg -> IFF,(APTR)((ULONG)(chunk) + sizeof (struct FeelinNode)),     4);
  35.       WriteChunkBytes(Msg -> IFF,(APTR)((ULONG)(chunk) + sizeof (struct FeelinNode) + 4), 4);
  36.       WriteChunkBytes(Msg -> IFF,(APTR)((ULONG)(chunk) + sizeof (struct FeelinNode) + 8), chunk -> Size);
  37.    }
  38.    return PopChunk(Msg -> IFF);
  39. //+
  40. ///DS_ReadIFF
  41. F_METHODM(ULONG,DS_ReadIFF,FS_Dataspace_ReadIFF)
  42. {
  43.    struct LocalObjectData          *LOD   = F_LOD(Class,Obj);
  44.    struct ContextNode              *cn;
  45.    ULONG                            read  = NULL,id,size;
  46.    struct FeelinChunkData          *chunk;
  47.  
  48.    if (cn = CurrentChunk(Msg -> IFF))
  49.    while (cn -> cn_Size != read)
  50.    {
  51.       read += ReadChunkBytes(Msg -> IFF,(APTR)(&id),4);
  52.       read += ReadChunkBytes(Msg -> IFF,(APTR)(&size),4);
  53.  
  54.       if (chunk = F_NewP(LOD -> Pool,size + sizeof (struct FeelinChunkData)))
  55.       {
  56.          chunk -> ID    = id;
  57.          chunk -> Size  = size;
  58.  
  59.          read += ReadChunkBytes(Msg -> IFF,(APTR)((ULONG)(chunk) + sizeof (struct FeelinChunkData)),size);
  60.  
  61.          F_LinkTail(&LOD -> Chunks,chunk);
  62.       }
  63.    }
  64.    return read;
  65. }
  66. //+
  67.